package br.com.velp.sudecap.web.converter;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import org.apache.commons.lang.StringUtils;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.10.2012 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <descricao> Classe Responsável Pela Conversão de 
 *             Tipos de Objetos Utilizados Em Componentes JSF </descricao>
 * </sumario>
 */
@FacesConverter(value = "doubleConverter")
public class DoubleConverter implements Converter {
    
    private static final String PARAM_LIMITE = "limite";

    @Override
    public Object getAsObject(FacesContext fc, UIComponent uic, String value) {
	if (StringUtils.isNotBlank(value)) {
	    return Double.parseDouble(value.replaceAll("\\.", "").replaceAll(",", "."));
	}
	return null;
    }

    @Override
    public String getAsString(FacesContext fc, UIComponent uic, Object value) {
        
        Object param = uic.getAttributes().get(PARAM_LIMITE);
        DecimalFormat df = new DecimalFormat(getQtdCasasDecimais(param), new DecimalFormatSymbols(new Locale("pt","BR")));
        
	return value != null ? df.format(value) : null;
        
    }
    
    private String getQtdCasasDecimais(Object param){
        
        if(param == null){
            
            return "#,##0.00";
            
        } else {
            
            Integer qtdCasas = Integer.valueOf(param.toString());
            String parteInteira = "#,##0.";
            
            for(int i = 0; i < qtdCasas; i++){
                parteInteira += "0";
            }
            
            return parteInteira;
            
        }
        
    }
    
}
